<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 一、then的失败返还值；
      // let p = new Promise((resolve, reject) => {
      //   reject("失败了");
      // });

      // let result = p.then(
      //   (res) => {},
      //   (err) => {
      //     // console.log("失败执行了", err);
      //     // return "error";
      //     // return new Promise((resolve, reject) => {
      //     // resolve("返还的成功状态promise对象");
      //     // reject("失败的promise对象");
      //     throw new Error("错了");
      //     // });
      //     // return 1111;
      //     // return new Promise((res, rej) => {
      //     //   rej("错误1");
      //     // });
      //   }
      // );

      // let result2 = result.then(
      //   (res) => {
      //     // console.log("成功了");
      //   },
      //   (err) => {
      //     console.log("失败了", err);
      //     return new Promise((res, rej) => {
      //       rej("错误2");
      //     });
      //   }
      // );

      // // console.log(result);
      // result2.then(
      //   (res) => {
      //     // console.log("成功了");
      //   },
      //   (err) => {
      //     console.log("失败了", err); // 失败了  错误2
      //   }
      // );

      /*
      onRejected的返还值：
        1.没有返还：得到的一个 成功状态的promise对象，promiseResult是 undefined；
        2.返还普通值： 得到的是一个成功状态的promise对象 ，promiseResult是返还的值；
        3.返还promise对象
                        得到返还的promise对象 ： 成功可以得到  失败的也可以得到
        4.抛出一个错误
                    得到一个失败状态的promise对象 ，promiseResult的值是 错误的内容


            // 总结：如果在 onRejected里想要失败状态传递下去，我们会返还一个失败状态的promise对象
      */

      //二、 then的穿透
      // 如果then里出现不能被识别数据（不是回调函数），那么就会出现穿透现象，得到的promise对象就是上一个promise对象的结果；

      let p = new Promise((resolve, reject) => {
        resolve("成功");
        // reject("失败");
      });

      let result = p.then(123, (err) => {
        console.log(err);
      });
      console.log(result);
    </script>
  </body>
</html>
